package com.example.zuoye.controller;

import com.example.zuoye.entity.User;
import com.example.zuoye.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @Autowired
    HttpServletRequest request; //通过注解获取一个request

    User user = new User();

    /**
     * 访问user/login路径
     * @return login,返回login前端页面
     */
    @RequestMapping("/login")
    public String login(){
        return "login";
    }

    /**
     * 访问user/register
     * @return register,返回注册页面
     */
    @RequestMapping("/register")
    public String register(){
        return "register";
    }

    /**
     * 登录功能,前端点击登录按钮,根据前端的username,password,查看数据库中是否存在
     * @param model
     * @return  成功:跳转到/home 前端页面
     *          失败:login,返回前端login页面
     * @throws Exception
     */
    @RequestMapping("/ulogin")
    public String login(Model model) throws Exception{

        HttpSession session = request.getSession();

        System.out.println("执行了ulogin方法");

        // 获取前端的username,password
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 通过用户名查询数据库，判断用户是否存在
        // 不存在跳转至注册页面
        String usernameDB = userService.findUserNameByUserName(username);
        if (usernameDB == null){
            System.out.println("该用户名不存在");
            // 返回 该用户名不存在 信息给前端
            model.addAttribute("tip_registered","该用户名不存在");
            return "login";
        }

        // 数据库中,根据username,password查询用户信息
        user = userService.checkByUP(username, password);
        // 用户user存在于数据库中
        if (user != null){
            // 若user存在写入session
            session.setAttribute("user_login",user);
            // 跳转到/home前端页面
            return "redirect:/home";
        }else{
            // 返回 密码不正确 信息给前端

            model.addAttribute("tip_registered","密码不正确");
            return "login";
        }
    }

    /**
     * 注册功能,存入username,password,phone
     * @param model
     * @param user
     * @return  成功: 跳转到user/login 前端页面
     *          失败: 跳转到user/login 前端页面
     */
    @RequestMapping("/uregister")
    public String register(Model model,
                           User user){
        HttpSession session = request.getSession();

        System.out.println("执行了uregister方法");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String password2 = request.getParameter("password2");
        String phone = request.getParameter("phone");

        // 前端的注册信息不允许为空
        if (username == null || password == null || password2 == null || phone == null) {
            model.addAttribute("tip_registered","注册信息不能为空");
            return "login";
        }

        // 对两次输入的密码进行校验
        if (!password.equals(password2)){
            model.addAttribute("tip_registered","两次输入的密码不一致");
            return "login";
        }
        // 数据库中查询username是否存在,不存在则插入,存在则提示:该用户名已经存在
        String usernameDB = userService.findUserNameByUserName(username);
        if (usernameDB == null){
            user.setUsername(username);
            user.setPassword(password);
            user.setPhone(phone);
            // 将用户信息username,password,phone插入数据库末尾
            userService.insertUser(user);
        }else{
            model.addAttribute("tip_registered","该用户名已注册");
            return "login";
        }
        System.out.println("注册成功");
        model.addAttribute("tip_registered","注册成功");
        return "redirect:/user/login";
    }

    /**
     * 功能: 用户退出
     * @return redirect:/user/login"
     */
    @RequestMapping("/exit")
    public String exit(){
        HttpSession session = request.getSession();

        session.removeAttribute("user_login");
        return "redirect:/user/login";
    }
}
